Kettle实战系列之基于Carte构建微服务

您所在的位置:网站首页 kettle 循环获取变量 Kettle实战系列之基于Carte构建微服务

Kettle实战系列之基于Carte构建微服务

2023-04-12 07:41| 来源: 网络整理| 查看: 265

摘要:本文由以数据之名分享,正所谓“所思即所见,所见即所得”。上一篇文章“Kettle基于Carte构建执行容器集群”,叙述了基于Kettle自带的Carte模块,如何构建高可用的Kettle作业和转换的运行服务集群。今天,我们跟着小编的节奏,继续探讨Kettle实战系列之基于Carte实现数据查询服务,做到数据清洗与数据服务端到端链路“所思、所见、所得”的完美结合,我们称之为ETL as a Service(EaaS)。

Carte 是用于执行在 Spoon 中建模的作业和转换的命令行工具。使用 Carte Clusters 来:在 Carte 集群上运行转换和作业在远程 Carte 服务器上运行的计划作业从命令行界面或 URL 停止或 URLStop Carte从 Carte 服务器上的存储库运行转换和作业1.1、Carte服务容器简述

Carte 是一个简单的 Web 服务器,允许您远程运行转换和作业。它接收包含要运行的转换和执行配置的 XML(使用一个小 servlet)。它允许您远程监控、启动和停止在 Carte 服务器上运行的转换和作业。

您可以将 Carte 的单个实例设置为作为作业或转换的独立执行引擎运行。在 Spoon 中,您可以定义一个或多个 Carte 服务器并向它们发送作业和转换。如果要提高资源密集型转换和作业的 PDI 性能,请使用 Carte 集群。

1.2、Carte集群的架构类型

有两种类型的 Carte 集群。静态 Carte 集群具有固定架构,指定一个主节点和两个或多个从节点。在静态集群中,您在设计时指定集群中的节点, 然后再运行转换或作业。

AD动态 Carte 集群具有一个架构,该架构指定一个主节点和不同数量的从节点。与静态集群不同,从节点直到运行时才知道。相反,您注册从属节点,然后在运行时,PDI 每 30 秒监视从属节点以查看它是否可用于执行转换和作业处理任务。

对于没有大量机器(虚拟或真实)用于 PDI 转换的较小环境,静态集群是一个不错的选择。 如果经常添加或删除节点(例如在云计算环境中),动态集群可以很好地工作。动态集群也更适用于转换性能极其重要的环境,或者可能存在多个并发转换执行的环境。

1.3、Carte服务的启动与停止API1.3.1、启动Carte服务:#1、启动API: ./carte.sh pwd/carte-slave-config.xml #2、补充参数: #2.1、接收线程数量,专用于接收传入连接的线程数。接收器的数量应小于或等于CPU的数量。 KETTLE_CARTE_JETTY_ACCEPTORS acceptors #2.2、接收队列大小,在操作系统开始发送拒绝之前可以排队的连接请求数。 KETTLE_CARTE_JETTY_ACCEPT_QUEUE_SIZE acceptQueueSize #2.3、低资源最大空闲时间,这允许服务器快速关闭空闲连接,以便优雅地处理高负载情况。 KETTLE_CARTE_JETTY_RES_MAX_IDLE_TIME lowResourcesMaxIdleTime #3、调整方式: 更改kettle.properties文件中的Jetty服务器参数 更改carte-slave-config.xml文件中的Jetty服务器参数 2 2 2 1.3.2、停止Carte服务:#1、API: Carte [-s] [-p ] [-u ] #2、API示例: Carte 127.0.0.1 8080 -s -p itbigbird -u itbigbird #3、HTTP API示例: http://localhost:8080/kettle/stopCarte

2.1、查看Carte容器运行状态

访问Carte容器自带的Web UI可以看每个任务的运行状态、查看任务的运行日志:

http://127.0.0.1:8088/kettle/status/

2.2、执行作业API#1、请求方法 支持post、get #2、请求url示例,executeJob http://127.0.0.1:8088/kettle/executeJob/?rep=kettle-itbigbird&job=/cms_job&user=itbigbird #3、Basic Auth Carte容器服务默认鉴权信息,用户名:cluster,密码:cluster #4、2和3可以组合使用,省去基本鉴权 http://cluster:[email protected]:8088/kettle/executeJob/?rep=kettle-itbigbird&job=/cms_job&user=itbigbird2.3、执行转换API#1、请求方法 支持post、get #2、请求url示例,executeTrans http://cluster:[email protected]:8088/kettle/executeTrans/?trans=d:/itbigbird/demo/cms.ktr&user=itbigbird #3、同上3和4说明2.4、参数补充说明rep:如果用了本地文件或数据库资源库,请指定任务归属的资源库;否则,忽略该配置job:如果用了资源库,执行作业file时,请指定任务相对路径;否则,请指定Job绝对文件路径trans:如果用了资源库,执行转换file时,请指定任务相对路径;否则,请指定Trans绝对文件路径user:自定义参数变量……:……

Kettle工具我们一般都用来作为ETL数据清洗的工具,但实际上Kettle架构模块Carte也可以作为服务引擎来提供数据查询服务,下面我们先来看一下Carte微服务技术架构图。

Carte微服务架构流程说明:

APP、PC等客户端通过公网或内网SLB,访问Carte微服务网关API,发起调用Post或Get请求;gateway把客户端请求,转发给Carte服务容器;Carte服务容器,调用Kettle Carte API,执行一个Job作业或者一个Trans转换;Job或者Trans接收API执行命令,并接收服务请求参数,然后解析参数给数据库DB或其他OSS查询请求,中间加上个性化的ETL处理逻辑,执行结果输出文件(Json Output、文本文件等);Trans把ETL结果集,发送给请求Carte Servlet容器;Carte 服务容器把结果集,返回给网关Gateway;网关Gateway,再把结果集转发给请求客户端。

4.1、启动Carte服务容器集群Carte.bat pwd/carte-config-master-8088.xmlCarte.bat pwd/carte-config-slave-8081.xmlCarte.bat pwd/carte-config-slave-8082.xml

4.2、模型设计-- ---------------------------- -- Table structure for `itbigbird_carte_api` -- ---------------------------- DROP TABLE IF EXISTS `itbigbird_carte_api`; CREATE TABLE `itbigbird_carte_api` ( `id` int(11) NOT NULL AUTO_INCREMENT, `day_id` varchar(10) DEFAULT NULL COMMENT '日期', `job_name` varchar(50) DEFAULT NULL COMMENT '任务名称', `status` char(1) DEFAULT NULL COMMENT '状态:0失败,1成功', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='carte微服务测试模型'; -- ---------------------------- -- Records of itbigbird_carte_api -- ---------------------------- INSERT INTO `itbigbird_carte_api` VALUES ('1', '2021-08-19', '欢迎关注以数据之名', '1', '2021-08-20 17:41:06', '2021-08-20 17:41:06'); INSERT INTO `itbigbird_carte_api` VALUES ('2', '2021-08-20', '欢迎关注以数据之名', '1', '2021-08-20 17:41:19', '2021-08-20 17:41:19'); INSERT INTO `itbigbird_carte_api` VALUES ('3', '2021-08-18', '欢迎关注以数据之名', '2', '2021-08-20 17:41:55', '2021-08-20 17:41:55');4.3、转换流程设计

Carte服务API获取的参数方式有两种,从转换属性自定义接收命名参数和用获取变量组件接收参数

4.3.1、示例cms-carte-1流程图(转换属性自定义接收命名参数)

表输入直接接收Carte服务请求参数,需要双击空白处定义命名参数

获取输入数据流结果集,输出json结构文件,并发送数据到Carte Servlet。所有带有发送结果到servlet选项的组件,都可以支撑数据清洗结果的服务推送

执行接口调用Post请求http://cluster:[email protected]:8088/kettle/executeTrans/?trans=d:/itbigbird/cms-carte-1.ktr&status=1返回请求结果集Json

4.3.2、示例cms-carte-2流程图(获取变量组件)

获取变量组件,直接接收Carte服务请求参数,无需预定义命名参数Java代码校验参数是否非空或默认值,动态绑定查询SQL

执行组装后的动态SQL,输出查询结果集

获取数据流结果集,输出Json结构文件,并发送数据到Carte Servlet,同上例执行接口调用Get请求http://cluster:[email protected]:8088/kettle/executeTrans/?trans=d:/itbigbird/cms-carte-2.ktr&status=1返回请求结果集Json

5.1、Carte任务运行分析

5.2、Carte服务中文乱码处理

在Windows环境下,返回结果集中文可能会存在乱码,这时需要修改Kettle的全局配置文件/.kettle/kettle.properties中Servlet字符集编码参数。

KETTLE_DEFAULT_SERVLET_ENCODING = UTF-8

备注:此操作配置后,需要重启Carte服务集群各个节点,才会生效配置。

5.3、Carte服务测试模型全量数据

Kettle插件开发之Splunk篇

Kettle插件开发之Elasticsearch篇

Kettle插件开发之KafkaConsumerAssignPartition篇

Kettle插件开发之KafkaProducer篇

Kettle插件开发之KafkaConsumer篇

Kettle插件开发之KafkaConsumerAssignPartition篇

Kettle插件开发之MQToSQL篇

Kettle插件开发之Redis篇

基于Kettle快速构建基础数据仓库平台

Kettle知识库问答系列之三十而立

Kettle知识库问答系列之四十不惑

Kettle知识库问答系列之五十而知天命

Kettle知识库问答系列之六十而耳顺

Kettle知识库问答系列之七十古稀

Kettle实战系列之Carte集群应用

Kettle实战系列之动态邮件

虽小编一己之力微弱,但读者众星之光璀璨。小编敞开心扉之门,还望倾囊赐教原创之文,期待之心满于胸怀,感激之情溢于言表。一句话,欢迎联系小编投稿您的原创文章!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3